﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using DTO;
using BUS;

namespace GUI
{
    public partial class ChiTietPhieuNhap : Form
    {
        public string _mapn { get; set; }
        public string _mancc { get; set; }
        public DateTime _ngaynhap { get; set; }
        public int _kq { get; set; }
        public ChiTietPhieuNhap()
        {
            InitializeComponent();
     
            //Column chi tiết phiếu nhập
            DataGridViewColumn clctpn = new DataGridViewColumn();
            DataGridViewCell cell = new DataGridViewTextBoxCell();
            clctpn.CellTemplate = cell;
            clctpn.HeaderText = "Mã Chi Tiết Phiếu Nhập";
            clctpn.Name = "MACTPN";
            clctpn.Visible = true;
            clctpn.Width = 150;
            gridViewCTPN.Columns.Add(clctpn);
            //combobox mã mặt hàng
            addCombobox();
            //Column số lượng
            DataGridViewColumn clsl = new DataGridViewColumn();
            clsl.CellTemplate = cell;
            clsl.HeaderText = "Số Lượng";
            clsl.Name = "SOLUONG";
            clsl.Visible = true;
            clsl.Width = 120;
            gridViewCTPN.Columns.Add(clsl);
            // Column đơn giá
            DataGridViewColumn cldg = new DataGridViewColumn();
            cldg.CellTemplate = cell;
            cldg.HeaderText = "Đơn Giá";
            cldg.Name = "DOMGIA";
            cldg.Visible = true;
            cldg.Width = 120;
            gridViewCTPN.Columns.Add(cldg);
        }

        // combobox mặt hàng
        public void addCombobox()
        {
            List<MatHangDTO> dtoDS = new List<MatHangDTO>();
            MatHangBUS bus = new MatHangBUS();
            dtoDS = bus.HienThi();
            DataGridViewComboBoxColumn cmbSanPham = new DataGridViewComboBoxColumn();
            cmbSanPham.HeaderText = "Sản Phẩm";
            cmbSanPham.Visible = true;
            cmbSanPham.Width = 160;
            cmbSanPham.DataSource = dtoDS;
            cmbSanPham.DisplayMember = "TENHANG";
            cmbSanPham.ValueMember = "MAMH";
            cmbSanPham.DataPropertyName = "MATHANG";
            gridViewCTPN.Columns.Add(cmbSanPham);
        }

        private void PhieuNhap_Load(object sender, EventArgs e)
        {
            ListNCC();
            if (_kq == 1)
            {
                lblPhieuNhap.Text = "Tạo mới Phiếu Nhập Hàng";
                lblPhieuNhap.Location = new System.Drawing.Point(200, 13);
                NgayHienTai();
                btnCapNhap.Enabled = false;
            }
            else if (_kq == 2)
            {
                lblPhieuNhap.Text = "Cập Nhập Phiếu Nhập Hàng";
                lblPhieuNhap.Location = new System.Drawing.Point(200, 13);
                txtMaPN.Enabled = false;
                txtMaPN.Text = _mapn;
                dtpNgayLap.Value = _ngaynhap;
                cmbNCC.SelectedValue = _mancc;
                HienThiDanhSach(_mapn);
                btnThem.Enabled = false;
                gridViewCTPN.Columns[0].ReadOnly = true;
            }
            else if (_kq == 3)
            {
                txtMaPN.Text = _mapn;
                txtMaPN.Enabled = false;
                lblPhieuNhap.Text = "Phiếu Gửi Hàng";
                lblPhieuNhap.Location = new System.Drawing.Point(200, 13);
                NgayHienTai();
                btnCapNhap.Enabled = false;
                btnThem.Enabled = false;
                HienThiDanhSach(_mapn);
                gridViewCTPN.ReadOnly = true;
            }
            else
            {
                lblPhieuNhap.Text = "Tạo mới Phiếu Nhập Hàng";
                lblPhieuNhap.Location = new System.Drawing.Point(200, 13);
                NgayHienTai();
                btnCapNhap.Enabled = false;
            }
        }

        public void HienThiDanhSach(string mapn)
        {
            List<CTPhieuNhapHangDTO> dtoDS = new List<CTPhieuNhapHangDTO>();
            CTPhieuNhapHangBUS bus = new CTPhieuNhapHangBUS();
            dtoDS = bus.HienThi(mapn);
            gridViewCTPN.Rows.Clear();
            for (int i = 0; i <= dtoDS.Count - 1; i++)
            {
                gridViewCTPN.Rows.Add(dtoDS[i].MACTPN, dtoDS[i].MAMH, dtoDS[i].SOLUONG, dtoDS[i].DONGIA);
            }
        }

        private void btnThoat_Click(object sender, EventArgs e)
        {
            Close();
        }

        //combobox ncc
        public void ListNCC()
        {
            List<NhaCungCapDTO> dtoDS = new List<NhaCungCapDTO>();
            NhaCungCapBUS bus = new NhaCungCapBUS();
            dtoDS = bus.HienThi();
            cmbNCC.DataSource = dtoDS;
            cmbNCC.DisplayMember = "TENNCC";
            cmbNCC.ValueMember = "MANCC";
        }

        //datetime
        public void NgayHienTai()
        {
            dtpNgayLap.Value = DateTime.Today;
        }

        private void btnThem_Click(object sender, EventArgs e)
        {
            if (txtMaPN.Text == "")
            {
                MessageBox.Show("Mã Phiếu Nhập Không Được Để Trống");
                return;
            }                       
            PhieuNhapHangBUS busPN=new PhieuNhapHangBUS();
            PhieuNhapHangDTO dto = new PhieuNhapHangDTO();

            if (busPN.KiemTraMAPN(txtMaPN.Text) == 1)
            {
                MessageBox.Show("Thêm Thất Bại Vì Đã Tồn Tại Mã Phiếu Nhập Này");
                return;
            }

            if (kiemtrarong() == 0)
            {
                MessageBox.Show("Chi Tiết Phiếu Nhập Không Được Để Trống.");
                return;
            }
            if (kiemtraso() == 0)
            {
                MessageBox.Show("Số Lượng Và Đơn Giá Phải Là Số.");
                return;
            }
            if (kiemtraCTPN() == 0)
            {
                MessageBox.Show("Mã Chi Tiết Phiếu Nhập Đã Tồn Tại");
                return;
            }

            dto.MAPN = txtMaPN.Text;           
            dto.MANCC = cmbNCC.SelectedValue.ToString();
            dto.NGAYNHAP = dtpNgayLap.Value;
            int tong = 0;
            for (int i = 0; i < gridViewCTPN.Rows.Count-1 ; i++)
            {
                tong = tong + int.Parse(gridViewCTPN.Rows[i].Cells[2].Value.ToString()) * int.Parse(gridViewCTPN.Rows[i].Cells[3].Value.ToString());
            }
            dto.TONGTIEN = tong;
            try
            {
                if (busPN.ThemPNH(dto) == 1)
                {
                    for (int i = 0; i < gridViewCTPN.Rows.Count - 1 ; i++)
                    {
                        CTPhieuNhapHangDTO dtoCTPN = new CTPhieuNhapHangDTO();
                        dtoCTPN.MACTPN = gridViewCTPN.Rows[i].Cells[0].Value.ToString();
                        dtoCTPN.MAPN = txtMaPN.Text;
                        dtoCTPN.MAMH = gridViewCTPN.Rows[i].Cells[1].Value.ToString();
                        dtoCTPN.SOLUONG = int.Parse(gridViewCTPN.Rows[i].Cells[2].Value.ToString());
                        dtoCTPN.DONGIA = int.Parse(gridViewCTPN.Rows[i].Cells[3].Value.ToString());
                        try
                        {
                            CTPhieuNhapHangBUS bus = new CTPhieuNhapHangBUS();
                            bus.ThemCTPNH(dtoCTPN);
                        }
                        catch
                        {
                            MessageBox.Show("Thêm Chi Tiết Phiếu Nhập Thất Bại");
                            return;
                        }
                    }
                    MessageBox.Show("Thêm Thành Công");
                                   
                } 
                else
                    MessageBox.Show("Thêm Thất Bại");
            }
            catch
            {
                MessageBox.Show("Thêm thất bại");
            }
        }

        private void btnCapNhap_Click(object sender, EventArgs e)
        {
            if (txtMaPN.Text == "")
            {
                MessageBox.Show("Mã Phiếu Nhập Không Được Để Trống");
                return;
            }
                        
            PhieuNhapHangBUS busPN = new PhieuNhapHangBUS();
            PhieuNhapHangDTO dto = new PhieuNhapHangDTO();           

            if (kiemtrarong() == 0)
            {
                MessageBox.Show("Chi Tiết Phiếu Nhập Không Được Để Trống.");
                return;
            }
            if (kiemtraso() == 0)
            {
                MessageBox.Show("Số Lượng Và Đơn Giá Phải Là Số.");
                return;
            }            

            dto.MAPN = txtMaPN.Text;
            dto.MANCC = cmbNCC.SelectedValue.ToString();
            dto.NGAYNHAP = dtpNgayLap.Value;
            int tong = 0;
            for (int i = 0; i < gridViewCTPN.Rows.Count - 1; i++)
            {
                tong = tong + int.Parse(gridViewCTPN.Rows[i].Cells[2].Value.ToString()) * int.Parse(gridViewCTPN.Rows[i].Cells[3].Value.ToString());
            }
            dto.TONGTIEN = tong;            
            try
            {
                if (busPN.CapNhat(dto) == 1)
                {
                    try
                    {
                        //cap nhat vao bang Chi tiet phieu nhap
                        for (int i = 0; i < gridViewCTPN.Rows.Count - 1; i++)
                        {
                            CTPhieuNhapHangDTO dtoCTPN = new CTPhieuNhapHangDTO();
                            dtoCTPN.MACTPN = gridViewCTPN.Rows[i].Cells[0].Value.ToString();
                            dtoCTPN.MAPN = txtMaPN.Text;
                            dtoCTPN.MAMH = gridViewCTPN.Rows[i].Cells[1].Value.ToString();
                            dtoCTPN.SOLUONG = int.Parse(gridViewCTPN.Rows[i].Cells[2].Value.ToString());
                            dtoCTPN.DONGIA = int.Parse(gridViewCTPN.Rows[i].Cells[3].Value.ToString());
                            
                            try
                            {
                                CTPhieuNhapHangBUS bus = new CTPhieuNhapHangBUS();
                                bus.CapNhat(dtoCTPN);
                            }
                            catch
                            {
                                MessageBox.Show("Cập nhật Thất Bại");
                                return;
                            }
                        }
                        MessageBox.Show("Cập nhật Thành Công!");  
                    }
                    catch
                    {
                        MessageBox.Show("Cập nhật Thất Bại");
                    }
                }
                else
                    MessageBox.Show("Cập nhật Thất Bại");
            }
            catch
            {
                MessageBox.Show("Cảm Phiền Nhập Số Nguyên Vào Số Lượng Tồn");
            }
        }

        private int kiemtraso()
        {
            for (int i = 0; i < gridViewCTPN.Rows.Count - 1; i++)
            {
                try
                {
                    double soluong = Convert.ToDouble(gridViewCTPN.Rows[i].Cells[2].Value);
                    double dongia = Convert.ToDouble(gridViewCTPN.Rows[i].Cells[3].Value);
                }
                catch
                {
                    MessageBox.Show("Cảm phiền nhập lại giá trị số vào cột Số lượng và Đơn giá");
                    return 0;
                }
            }
            return 1;
        }

        //kiểm tra các dòng nhập liệu trong datagridview có rỗng không
        private int kiemtrarong()
        {
            for (int j = 0; j < gridViewCTPN.ColumnCount; j++)
            {
                if (gridViewCTPN.Rows[0].Cells[j].Value == null)
                {
                    MessageBox.Show("Cảm phiền nhập đầy đủ thông tin Chi Tiết Phiếu Nhập.");
                    return 0;
                }
            }
            for (int i = 1; i < gridViewCTPN.Rows.Count - 1; i++)
            {
                for (int j = 0; j < gridViewCTPN.ColumnCount; j++)
                {
                    if (gridViewCTPN.Rows[i].Cells[j].Value == null)
                    {
                        MessageBox.Show("Cảm phiền nhập đầy đủ thông tin Chi Tiết Phiếu Nhập.");
                        return 0;
                    }
                }
            }
            return 1;
        }

        //kiem tra mã chi tiết phiếu nhập
        private int kiemtraCTPN()
        {
            CTPhieuNhapHangBUS bus = new CTPhieuNhapHangBUS();                        
            if (bus.KiemTraMACTPN(gridViewCTPN.Rows[0].Cells[0].Value.ToString()) == 1)
            {                
                return 0;
            }
            
            for (int i = 1; i < gridViewCTPN.Rows.Count - 1; i++)
            {
                for (int j = 0; j < gridViewCTPN.ColumnCount; j++)
                {
                    if ( bus.KiemTraMACTPN(gridViewCTPN.Rows[i].Cells[j].Value.ToString())==1)
                    {                        
                        return 0;
                    }
                }
            }
            return 1;
        }
    }
}
